
import sys

from PyQt5.QtGui import QPainter, QPainterPath
from PyQt5.QtWidgets import QWidget, QApplication


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.setGeometry(300, 300, 380, 250)
        self.setWindowTitle('Bézier curve')
        self.show()

    def paintEvent(self, e):
        # 创建 QPainter 对象，用于绘制图形
        qp = QPainter()
        # 开始绘制
        qp.begin(self)
        # 设置抗锯齿渲染，使曲线更平滑
        qp.setRenderHint(QPainter.Antialiasing)
        # 调用自定义的绘制贝塞尔曲线的方法
        self.drawBezierCurve(qp)
        # 结束绘制
        qp.end()

    def drawBezierCurve(self, qp):
        # 创建 QPainterPath 对象，用于定义路径
        path = QPainterPath()
        # 将路径的起点移动到 (30, 30)
        path.moveTo(30, 30)
        # 绘制三次贝塞尔曲线，控制点为 (30, 30) 和 (200, 350)，终点为 (350, 30)
        path.cubicTo(30, 30, 200, 350, 350, 30)

        # 使用 QPainter 绘制路径
        qp.drawPath(path)

def main():

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()